package main

import "fmt"

/*
关闭channel之后就无法再发送任何数据了，在消费方可以通过语法v, ok := <-ch测试channel是否被关闭。如果ok返回false，那么说明channel已经没有任何数据并且已经被关闭
*/
func fibonacci(n int, ch chan int) {
	x, y := 1, 1
	for i := 0; i < n; i++ {
		ch <- x
		x, y = y, x+y
	}
	close(ch) //关闭通道，只建议在生产者处关闭
}

func main() {
	ch := make(chan int, 10)
	go fibonacci(cap(ch), ch)
	for i := range ch { //for 能够不断的读取channel里面的数据，直到该channel被显式的关闭
		fmt.Println(i)
	}
	v, ok := <-ch //测试ch通道是否被关闭
	if ok {
		fmt.Println("从通道读取", v)
	} else {
		fmt.Println("通道已关闭")
	}
}
